package cn.iocoder.yudao.module.cont.service.base;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.cont.controller.admin.base.vo.*;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.BaseInfoDO;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.DetailInfoDO;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.MaterialInfoDO;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.PayInfoDO;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.ChangeInfoDO;
import cn.iocoder.yudao.module.cont.dal.dataobject.base.PlanInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 合同基础信息表  Service 接口
 *
 * @author 芋道源码
 */
public interface BaseInfoService {

    /**
     * 创建合同基础信息表 
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBaseInfo(@Valid BaseInfoSaveReqVO createReqVO);

    /**
     * 更新合同基础信息表 
     *
     * @param updateReqVO 更新信息
     */
    void updateBaseInfo(@Valid BaseInfoSaveReqVO updateReqVO);

    /**
     * 删除合同基础信息表 
     *
     * @param id 编号
     */
    void deleteBaseInfo(Long id);

    /**
     * 获得合同基础信息表 
     *
     * @param id 编号
     * @return 合同基础信息表 
     */
    BaseInfoDO getBaseInfo(Long id);

    /**
     * 获得合同基础信息表 分页
     *
     * @param pageReqVO 分页查询
     * @return 合同基础信息表 分页
     */
    PageResult<BaseInfoDO> getBaseInfoPage(BaseInfoPageReqVO pageReqVO);

    // ==================== 子表（建设合同详细信息） ====================

    /**
     * 获得建设合同详细信息分页
     *
     * @param pageReqVO 分页查询
     * @param htid 合同编号
     * @return 建设合同详细信息分页
     */
    PageResult<DetailInfoDO> getDetailInfoPage(PageParam pageReqVO, String htid);

    /**
     * 创建建设合同详细信息
     *
     * @param detailInfo 创建信息
     * @return 编号
     */
    Long createDetailInfo(@Valid DetailInfoDO detailInfo);

    /**
     * 更新建设合同详细信息
     *
     * @param detailInfo 更新信息
     */
    void updateDetailInfo(@Valid DetailInfoDO detailInfo);

    /**
     * 删除建设合同详细信息
     *
     * @param id 编号
     */
    void deleteDetailInfo(Long id);

	/**
	 * 获得建设合同详细信息
	 *
	 * @param id 编号
     * @return 建设合同详细信息
	 */
    DetailInfoDO getDetailInfo(Long id);

    // ==================== 子表（合同资料表 ） ====================

    /**
     * 获得合同资料表 分页
     *
     * @param pageReqVO 分页查询
     * @param htid 合同编号
     * @return 合同资料表 分页
     */
    PageResult<MaterialInfoDO> getMaterialInfoPage(PageParam pageReqVO, String htid);

    /**
     * 创建合同资料表 
     *
     * @param materialInfo 创建信息
     * @return 编号
     */
    Long createMaterialInfo(@Valid MaterialInfoDO materialInfo);

    /**
     * 更新合同资料表 
     *
     * @param materialInfo 更新信息
     */
    void updateMaterialInfo(@Valid MaterialInfoDO materialInfo);

    /**
     * 删除合同资料表 
     *
     * @param id 编号
     */
    void deleteMaterialInfo(Long id);

	/**
	 * 获得合同资料表 
	 *
	 * @param id 编号
     * @return 合同资料表 
	 */
    MaterialInfoDO getMaterialInfo(Long id);

    // ==================== 子表（合同收付款记录表 ） ====================

    /**
     * 获得合同收付款记录表 分页
     *
     * @param pageReqVO 分页查询
     * @param htid 合同编号
     * @return 合同收付款记录表 分页
     */
    PageResult<PayInfoDO> getPayInfoPage(PageParam pageReqVO, String htid);

    /**
     * 创建合同收付款记录表 
     *
     * @param payInfo 创建信息
     * @return 编号
     */
    Long createPayInfo(@Valid PayInfoDO payInfo);

    /**
     * 更新合同收付款记录表 
     *
     * @param payInfo 更新信息
     */
    void updatePayInfo(@Valid PayInfoDO payInfo);

    /**
     * 删除合同收付款记录表 
     *
     * @param id 编号
     */
    void deletePayInfo(Long id);

	/**
	 * 获得合同收付款记录表 
	 *
	 * @param id 编号
     * @return 合同收付款记录表 
	 */
    PayInfoDO getPayInfo(Long id);

    // ==================== 子表（合同变更记录表 ） ====================

    /**
     * 获得合同变更记录表 分页
     *
     * @param pageReqVO 分页查询
     * @param htid 合同编号
     * @return 合同变更记录表 分页
     */
    PageResult<ChangeInfoDO> getChangeInfoPage(PageParam pageReqVO, String htid);

    /**
     * 创建合同变更记录表 
     *
     * @param changeInfo 创建信息
     * @return 编号
     */
    Long createChangeInfo(@Valid ChangeInfoDO changeInfo);

    /**
     * 更新合同变更记录表 
     *
     * @param changeInfo 更新信息
     */
    void updateChangeInfo(@Valid ChangeInfoDO changeInfo);

    /**
     * 删除合同变更记录表 
     *
     * @param id 编号
     */
    void deleteChangeInfo(Long id);

	/**
	 * 获得合同变更记录表 
	 *
	 * @param id 编号
     * @return 合同变更记录表 
	 */
    ChangeInfoDO getChangeInfo(Long id);

    // ==================== 子表（合同收付款计划表 ） ====================

    /**
     * 获得合同收付款计划表 分页
     *
     * @param pageReqVO 分页查询
     * @param htid 合同编号
     * @return 合同收付款计划表 分页
     */
    PageResult<PlanInfoDO> getPlanInfoPage(PageParam pageReqVO, String htid);

    /**
     * 创建合同收付款计划表 
     *
     * @param planInfo 创建信息
     * @return 编号
     */
    Long createPlanInfo(@Valid PlanInfoDO planInfo);

    /**
     * 更新合同收付款计划表 
     *
     * @param planInfo 更新信息
     */
    void updatePlanInfo(@Valid PlanInfoDO planInfo);

    /**
     * 删除合同收付款计划表 
     *
     * @param id 编号
     */
    void deletePlanInfo(Long id);

	/**
	 * 获得合同收付款计划表 
	 *
	 * @param id 编号
     * @return 合同收付款计划表 
	 */
    PlanInfoDO getPlanInfo(Long id);

}